import { api } from '@/utils/api'
import { AuthService } from '@/services/auth'

/**
 * 相对路径fetch使用示例
 */

// 示例1: 基本的GET请求
export async function exampleGetRequest() {
  try {
    // 使用相对路径 - 会被代理到 http://localhost:3000/api/users
    const response = await api.get('/api/users')
    console.log('用户列表:', response.data)
    return response.data
  } catch (error) {
    console.error('获取用户列表失败:', error)
  }
}

// 示例2: POST请求发送数据
export async function examplePostRequest() {
  try {
    const userData = {
      username: 'testuser',
      email: 'test@example.com'
    }
    
    // 使用相对路径 - 会被代理到 http://localhost:3000/api/users
    const response = await api.post('/api/users', userData)
    console.log('创建用户成功:', response.data)
    return response.data
  } catch (error) {
    console.error('创建用户失败:', error)
  }
}

// 示例3: 带认证的请求
export async function exampleAuthenticatedRequest() {
  try {
    // 这个请求会自动添加Authorization头
    const response = await api.get('/api/auth/profile')
    console.log('用户信息:', response.data)
    return response.data
  } catch (error) {
    console.error('获取用户信息失败:', error)
  }
}

// 示例4: 使用AuthService进行认证
export async function exampleAuthService() {
  try {
    // 登录
    const loginResult = await AuthService.login({
      username: 'testuser',
      password: 'password123'
    })
    console.log('登录成功:', loginResult)
    
    // 获取用户信息
    const userProfile = await AuthService.getUserProfile()
    console.log('用户信息:', userProfile)
    
    return { loginResult, userProfile }
  } catch (error) {
    console.error('认证失败:', error)
  }
}

// 示例5: 自定义请求选项
export async function exampleCustomOptions() {
  try {
    const response = await api.request('/api/custom-endpoint', {
      method: 'PUT',
      headers: {
        'Custom-Header': 'custom-value'
      },
      showError: false // 不显示默认错误提示
    })
    
    console.log('自定义请求成功:', response.data)
    return response.data
  } catch (error) {
    // 手动处理错误
    console.error('自定义请求失败:', error)
  }
}

// 示例6: 文件上传
export async function exampleFileUpload(file: File) {
  try {
    const formData = new FormData()
    formData.append('file', file)
    
    const response = await api.request('/api/upload', {
      method: 'POST',
      body: formData,
      headers: {
        // 不要设置Content-Type，让浏览器自动设置
      }
    })
    
    console.log('文件上传成功:', response.data)
    return response.data
  } catch (error) {
    console.error('文件上传失败:', error)
  }
}

// 示例7: 查询参数
export async function exampleWithQueryParams() {
  try {
    const params = new URLSearchParams({
      page: '1',
      limit: '10',
      search: 'test'
    })
    
    const response = await api.get(`/api/search?${params.toString()}`)
    console.log('搜索结果:', response.data)
    return response.data
  } catch (error) {
    console.error('搜索失败:', error)
  }
}

// 示例8: 错误处理
export async function exampleErrorHandling() {
  try {
    const response = await api.get('/api/nonexistent-endpoint', {
      showError: false // 禁用默认错误提示
    })
    
    return response.data
  } catch (error) {
    if (error instanceof Error) {
      if (error.message.includes('404')) {
        console.log('资源不存在')
      } else if (error.message.includes('401')) {
        console.log('需要登录')
        // 重定向到登录页
        window.location.href = '/auth'
      } else {
        console.log('其他错误:', error.message)
      }
    }
  }
}

/**
 * 不同环境的配置示例
 */

// 开发环境 - 使用相对路径（通过Vite代理）
const devConfig = {
  apiBase: '', // 空字符串表示使用相对路径
  proxyTarget: 'http://localhost:3000'
}

// 生产环境 - 使用完整URL
const prodConfig = {
  apiBase: 'https://api.yourdomain.com',
  proxyTarget: null
}

// 测试环境 - 使用测试服务器
const testConfig = {
  apiBase: 'https://test-api.yourdomain.com',
  proxyTarget: null
}

/**
 * 使用说明：
 * 
 * 1. 开发环境：
 *    - 前端运行在 http://localhost:5173
 *    - 后端运行在 http://localhost:3000
 *    - 使用相对路径 /api/xxx 会被Vite代理到后端
 * 
 * 2. 生产环境：
 *    - 设置 VITE_API_BASE_URL 环境变量
 *    - 直接使用完整URL进行请求
 * 
 * 3. 优势：
 *    - 开发时无需硬编码后端地址
 *    - 避免跨域问题
 *    - 环境切换方便
 *    - 统一的错误处理
 *    - 自动添加认证头
 */ 